home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 26 / Cream of the Crop 26.iso / os2 / plnk081.zip / pilot-link.0.8.1 / include / pi-sync.h < prev    next >
C/C++ Source or Header  |  1997-05-23  |  3KB  |  89 lines

  1. #ifndef _PILOT_SYNC_H_
  2. #define _PILOT_SYNC_H_
  3.  
  4. #ifdef __cplusplus
  5. extern "C" {
  6. #endif
  7.  
  8. enum { RecordNothing , RecordNew, RecordDeleted, RecordModified, RecordPending };
  9.  
  10. struct PilotRecord {
  11.     recordid_t ID;
  12.     int attr;
  13.     int archived;
  14.     int secret;
  15.     int length;
  16.     int category;
  17.     unsigned char * record;
  18. };
  19.  
  20. struct SyncAbs;
  21. struct LocalRecord;
  22.  
  23. typedef struct SyncAbs SyncAbs;
  24. typedef struct LocalRecord LocalRecord;
  25. typedef struct PilotRecord PilotRecord;
  26.  
  27. /* This is a bit complex: we are setting up the list of structure members
  28.    needed to implement synchronization. These are defined outside of a 
  29.    structure definition, so they can be pasted into multiple definitions,
  30.    with the result of two structures sharing (at least in part) the same
  31.    layout. It's very likely that this approach is less portable then using
  32.    void*'s, but its less messy to read. */
  33.  
  34. #define StandardLocalRecord \
  35.     int attr; \
  36.     int archived; \
  37.     int secret
  38.  
  39. #define StandardSyncAbs \
  40.     int (*MatchRecord)(SyncAbs*, LocalRecord**, PilotRecord*); \
  41.     int (*FreeMatch)(SyncAbs*, LocalRecord**); \
  42.     int (*ArchiveLocal)(SyncAbs*, LocalRecord*); \
  43.     int (*ArchiveRemote)(SyncAbs*,LocalRecord*,PilotRecord*); \
  44.     int (*StoreRemote)(SyncAbs*,PilotRecord*); \
  45.     int (*ClearStatusArchiveLocal)(SyncAbs*,LocalRecord*); \
  46.     int (*Iterate)(SyncAbs*,LocalRecord**); \
  47.     int (*IterateSpecific)(SyncAbs*,LocalRecord**, int flag, int archived); \
  48.     int (*Purge)(SyncAbs*); \
  49.     int (*SetStatus)(SyncAbs*,LocalRecord*,int status); \
  50.     int (*SetArchived)(SyncAbs*,LocalRecord*, int); \
  51.     unsigned long (*GetPilotID)(SyncAbs*,LocalRecord*); \
  52.     int (*SetPilotID)(SyncAbs*,LocalRecord*,unsigned long); \
  53.     int (*Compare)(SyncAbs*,LocalRecord*,PilotRecord*); \
  54.     int (*CompareBackup)(SyncAbs*,LocalRecord*,PilotRecord*); \
  55.     int (*FreeTransmit)(SyncAbs*,LocalRecord*,PilotRecord*); \
  56.     int (*DeleteAll)(SyncAbs*); \
  57.     PilotRecord * (*Transmit)(SyncAbs*,LocalRecord*)
  58.  
  59. #ifdef Abstract_sync
  60.  
  61. /* Only lib/sync should define Abstract_sync. All other code must
  62.    define their own LocalRecord and SyncAbs structures. */
  63.  
  64. struct LocalRecord {
  65.         StandardLocalRecord;
  66. };
  67.  
  68. struct SyncAbs {
  69.         StandardSyncAbs;
  70. };
  71.  
  72. #endif
  73.  
  74. /* Erase all local records, and copy all remote records to local */
  75. extern int CopyFromRemote(int handle, int db, struct SyncAbs * s);
  76. /* Erase all remote records, and copy all local records to remote */
  77. extern int CopyToRemote(int handle, int db, struct SyncAbs * s);
  78. /* Synchronize local and remote using flags on remote */
  79. extern int FastSync(int handle, int db, struct SyncAbs * s );
  80. /* Synchronize by pulling all data off remote, and comparing to backup
  81.    on local if flags show no change */
  82. extern int SlowSync(int handle, int db, struct SyncAbs * s );
  83.  
  84. #ifdef __cplusplus
  85. }
  86. #endif
  87.  
  88. #endif
  89.